/* Copyright (c) 2008, John Cronin
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *     * Redistributions of source code must retain the above copyright
 *       notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above copyright
 *       notice, this list of conditions and the following disclaimer in the
 *       documentation and/or other materials provided with the distribution.
 *     * Neither the name of the copyright holder nor the
 *       names of its contributors may be used to endorse or promote products
 *       derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */

struct mb_header {
	unsigned long int		flags;
	unsigned long int		mem_lower;
	unsigned long int		mem_upper;
	unsigned long int		boot_device;
	char *				cmdline;
	unsigned long int		mods_count;
	unsigned long int		mods_addr;
	unsigned long int		elf_num;
	unsigned long int		elf_size;
	unsigned long int		elf_addr;
	unsigned long int		elf_shndx;
	unsigned long int		mmap_length;
	unsigned long int		mmap_addr;
	unsigned long int		drives_length;
	unsigned long int		drives_addr;
	unsigned long int		config_table;
	unsigned long int		boot_loader_name;
	unsigned long int		apm_table;
	unsigned long int		vbe_control_info;
	unsigned long int		vbe_mode_info;
	unsigned short int		vbe_mode;
	unsigned short int		vbe_interface_seg;
	unsigned short int		vbe_interface_off;
	unsigned short int		vbe_interface_len;
};

struct mb_mmap {
	unsigned long long int		base_addr;
	unsigned long long int		length;
	unsigned long int		type;
};

struct mb_mod {
	unsigned long int		mod_start;
	unsigned long int		mod_end;
	char *				string;
	unsigned long int		reserved;
};

